Move edge-constraints to GdkToplevel
authorMatthias Clasen <mclasen@redhat.com>
Mon, 9 Mar 2020 18:38:08 +0000 (11:38 -0700)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 12 Mar 2020 19:30:11 +0000 (15:30 -0400)
gdk/gdk-private.h
gdk/gdksurface.c
gdk/gdksurfaceprivate.h
gdk/gdktoplevel.c
gdk/gdktoplevel.h
gdk/gdktoplevelprivate.h
gdk/wayland/gdksurface-wayland.c
gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkprivate-x11.h
gdk/x11/gdksurface-x11.c
gtk/gtkwindow.c

index b5551b750cbfef0a835b0bb815b5b42b1c0e5112..5a8d2fe657473f0ae055b374f21e64af2cb883db 100644 (file)
@@ -18,8 +18,6 @@ void            gdk_pre_parse                   (void);
 void            gdk_surface_freeze_toplevel_updates      (GdkSurface *surface);
 void            gdk_surface_thaw_toplevel_updates        (GdkSurface *surface);
 
-gboolean        gdk_surface_supports_edge_constraints    (GdkSurface *surface);
-
 guint32         gdk_display_get_last_seen_time  (GdkDisplay *display);
 
 void gdk_display_set_double_click_time     (GdkDisplay   *display,
index 48bac4433ea571410d369a24349cc9df8c2d9d43..2c77970c2ed6c22ba08d46cb65d25e6f3caaf38f 100644 (file)
@@ -2723,21 +2723,6 @@ gdk_surface_set_shadow_width (GdkSurface *surface,
     class->set_shadow_width (surface, left, right, top, bottom);
 }
 
-gboolean
-gdk_surface_supports_edge_constraints (GdkSurface *surface)
-{
-  GdkSurfaceClass *class;
-
-  g_return_val_if_fail (GDK_IS_SURFACE (surface), FALSE);
-  g_return_val_if_fail (!GDK_SURFACE_DESTROYED (surface), FALSE);
-
-  class = GDK_SURFACE_GET_CLASS (surface);
-  if (class->supports_edge_constraints)
-    return class->supports_edge_constraints (surface);
-  else
-    return FALSE;
-}
-
 void
 gdk_surface_set_state (GdkSurface      *surface,
                        GdkSurfaceState  new_state)
index 714cc9f02f8497a17fd7239a41411188010e75ea..23bd733e5dcb90ee9c72e3b0e3f2e09e21d0d4f7 100644 (file)
@@ -186,7 +186,6 @@ struct _GdkSurfaceClass
                                            gboolean        attached,
                                            GdkGLContext   *share,
                                            GError        **error);
-  gboolean     (* supports_edge_constraints)(GdkSurface    *surface);
 };
 
 void gdk_surface_set_state (GdkSurface      *surface,
index c2c64f368e84778a1b49f2cfe481d2445b5919c2..007f80845e36c6ca2b6fb460b6ed509d5ef7612f 100644 (file)
@@ -71,6 +71,12 @@ gdk_toplevel_default_show_window_menu (GdkToplevel *toplevel,
   return FALSE;
 }
 
+static gboolean
+gdk_toplevel_default_supports_edge_constraints (GdkToplevel *toplevel)
+{
+  return FALSE;
+}
+
 static void
 gdk_toplevel_default_init (GdkToplevelInterface *iface)
 {
@@ -79,6 +85,7 @@ gdk_toplevel_default_init (GdkToplevelInterface *iface)
   iface->lower = gdk_toplevel_default_lower;
   iface->focus = gdk_toplevel_default_focus;
   iface->show_window_menu = gdk_toplevel_default_show_window_menu;
+  iface->supports_edge_constraints = gdk_toplevel_default_supports_edge_constraints;
 
   g_object_interface_install_property (iface,
       g_param_spec_flags ("state",
@@ -516,3 +523,21 @@ gdk_toplevel_set_deletable (GdkToplevel *toplevel,
 
   g_object_set (toplevel, "deletable", deletable, NULL);
 }
+
+/**
+ * gdk_toplevel_supports_edge_constraints:
+ * @toplevel: a #GdkToplevel
+ *
+ * Returns whether the desktop environment supports
+ * tiled window states.
+ *
+ * Returns: %TRUE if the desktop environment supports
+ *     tiled window states
+ */
+gboolean
+gdk_toplevel_supports_edge_constraints (GdkToplevel *toplevel)
+{
+  g_return_val_if_fail (GDK_IS_TOPLEVEL (toplevel), FALSE);
+
+  return GDK_TOPLEVEL_GET_IFACE (toplevel)->supports_edge_constraints (toplevel);
+}
index e513ad9adfa39a968be3004edc4914d7a73e14ee..0827c5bf3884724fec1abb5e507b8239fcbae526 100644 (file)
@@ -103,6 +103,9 @@ void          gdk_toplevel_set_decorated         (GdkToplevel      *toplevel,
 GDK_AVAILABLE_IN_ALL
 void          gdk_toplevel_set_deletable         (GdkToplevel      *toplevel,
                                                   gboolean          deletable);
+GDK_AVAILABLE_IN_ALL
+gboolean      gdk_toplevel_supports_edge_constraints (GdkToplevel *toplevel);
+
 G_END_DECLS
 
 #endif /* __GDK_TOPLEVEL_H__ */
index bd5c9672f3ddf00053dd33c72a19b759627d3216..ac1aae272578f3311ede3dbe66568640f8b5a2f0 100644 (file)
@@ -20,6 +20,7 @@ struct _GdkToplevelInterface
                                          guint32            timestamp);
   gboolean      (* show_window_menu)    (GdkToplevel       *toplevel,
                                          GdkEvent          *event);
+  gboolean      (* supports_edge_constraints) (GdkToplevel *toplevel);
 };
 
 typedef enum
index 83291f69e457821e28ef99a4640f3c7adfef1541..0c795e8d82f7c5976eaf37a82dbfc9a2727f3bfb 100644 (file)
@@ -3711,7 +3711,6 @@ gdk_wayland_surface_class_init (GdkWaylandSurfaceClass *klass)
   impl_class->set_opaque_region = gdk_wayland_surface_set_opaque_region;
   impl_class->set_shadow_width = gdk_wayland_surface_set_shadow_width;
   impl_class->create_gl_context = gdk_wayland_surface_create_gl_context;
-  impl_class->supports_edge_constraints = gdk_wayland_surface_supports_edge_constraints;
 
   signals[COMMITTED] = g_signal_new (g_intern_static_string ("committed"),
                                      G_TYPE_FROM_CLASS (object_class),
@@ -4551,6 +4550,12 @@ gdk_wayland_toplevel_show_window_menu (GdkToplevel *toplevel,
   return gdk_wayland_surface_show_window_menu (GDK_SURFACE (toplevel), event);
 }
 
+static gboolean
+gdk_wayland_toplevel_supports_edge_constraints (GdkToplevel *toplevel)
+{
+  return gdk_wayland_surface_supports_edge_constraints (GDK_SURFACE (toplevel));
+}
+
 static void
 gdk_wayland_toplevel_iface_init (GdkToplevelInterface *iface)
 {
@@ -4559,6 +4564,7 @@ gdk_wayland_toplevel_iface_init (GdkToplevelInterface *iface)
   iface->lower = gdk_wayland_toplevel_lower;
   iface->focus = gdk_wayland_toplevel_focus;
   iface->show_window_menu = gdk_wayland_toplevel_show_window_menu;
+  iface->supports_edge_constraints = gdk_wayland_toplevel_supports_edge_constraints;
 }
 
 typedef struct
index 24e1636bb396ec4fe2962cabb5feb529f429a660..7d0786eb48b52986cb20b0e0be445231a5734ef1 100644 (file)
@@ -241,7 +241,7 @@ do_edge_constraint_state_check (GdkSurface      *surface,
    * GDK_SURFACE_STATE_TILED to be set if any edge is tiled, and cleared
    * if no edge is tiled.
    */
-  if (!gdk_surface_supports_edge_constraints (surface))
+  if (!gdk_x11_surface_supports_edge_constraints (surface))
     {
       /* FIXME: we rely on implementation details of mutter here:
        * mutter only tiles horizontally, and sets maxvert when it does
index 71f5d2e75e566d49f85b1dbeb4d7ee59984d4e90..70c12159d594fb06e2a86494786806f3c3f14250 100644 (file)
@@ -235,6 +235,7 @@ void gdk_x11_surface_show (GdkSurface *surface,
 void gdk_x11_surface_raise (GdkSurface *surface);
 void gdk_x11_surface_set_opacity (GdkSurface *surface,
                                   double      opacity);
+gboolean gdk_x11_surface_supports_edge_constraints (GdkSurface *surface);
 
 GdkGrabStatus _gdk_x11_convert_grab_status (gint status);
 
index 96e88ad3bff9bbe8df6ffd00adb8a730279d1d52..222bc550e80d48d7ae0bf8c5388636891829ca96 100644 (file)
@@ -184,7 +184,7 @@ gdk_x11_surface_get_unscaled_size (GdkSurface *surface,
     *unscaled_height = impl->unscaled_height;
 }
 
-static gboolean
+gboolean
 gdk_x11_surface_supports_edge_constraints (GdkSurface *surface)
 {
   return gdk_x11_screen_supports_net_wm_hint (GDK_SURFACE_SCREEN (surface),
@@ -4670,7 +4670,6 @@ gdk_x11_surface_class_init (GdkX11SurfaceClass *klass)
   impl_class->set_shadow_width = gdk_x11_surface_set_shadow_width;
   impl_class->create_gl_context = gdk_x11_surface_create_gl_context;
   impl_class->get_unscaled_size = gdk_x11_surface_get_unscaled_size;
-  impl_class->supports_edge_constraints = gdk_x11_surface_supports_edge_constraints;
 }
 
 #define LAST_PROP 1
@@ -5082,6 +5081,12 @@ gdk_x11_toplevel_show_window_menu (GdkToplevel *toplevel,
   return gdk_x11_surface_show_window_menu (GDK_SURFACE (toplevel), event);
 }
 
+static gboolean
+gdk_x11_toplevel_supports_edge_constraints (GdkToplevel *toplevel)
+{
+  return gdk_x11_surface_supports_edge_constraints (GDK_SURFACE (toplevel));
+}
+
 static void
 gdk_x11_toplevel_iface_init (GdkToplevelInterface *iface)
 {
@@ -5090,6 +5095,7 @@ gdk_x11_toplevel_iface_init (GdkToplevelInterface *iface)
   iface->lower = gdk_x11_toplevel_lower;
   iface->focus = gdk_x11_toplevel_focus;
   iface->show_window_menu = gdk_x11_toplevel_show_window_menu;
+  iface->supports_edge_constraints = gdk_x11_toplevel_supports_edge_constraints;
 }
 
 typedef struct {
index f59b9429da4aaae723ca403d61eb17a7ae01f50b..8442fd53a95f14f99a34308bc11a34ad924adca0 100644 (file)
@@ -1619,7 +1619,7 @@ edge_under_coordinates (GtkWindow     *window,
       priv->maximized)
     return FALSE;
 
-  supports_edge_constraints = gdk_surface_supports_edge_constraints (priv->surface);
+  supports_edge_constraints = gdk_toplevel_supports_edge_constraints (GDK_TOPLEVEL (priv->surface));
   constraints = constraints_for_edge (edge);
 
   if (!supports_edge_constraints && priv->tiled)